home *** CD-ROM | disk | FTP | other *** search
- /*--------------------------------------------------------------------------*/
- /* */
- /* */
- /* ------------ Bit-Bucket Software <no-Inc> */
- /* \ 10001101 / Writers and Distributors of */
- /* \ 011110 / No-Cost<no-tm> Software. */
- /* \ 1011 / */
- /* ------ */
- /* */
- /* Copyright (C) 1987, 1988, 1989 by Robert Hartman and Vincent Perriello */
- /* */
- /* */
- /* Box Drawing subroutines for BinkleyTerm 2.10 */
- /* */
- /* */
- /* For complete details of the licensing restrictions, please refer */
- /* to the License agreement, which is published in its entirety in */
- /* the MAKEFILE and BT.C, and also contained in the file LICENSE.210. */
- /* */
- /* USE OF THIS FILE IS SUBJECT TO THE RESTRICTIONS CONTAINED IN THE */
- /* BINKLEYTERM LICENSING AGREEMENT. IF YOU DO NOT FIND THE TEXT OF */
- /* THIS AGREEMENT IN ANY OF THE AFOREMENTIONED FILES, OR IF YOU DO */
- /* NOT HAVE THESE FILES, YOU SHOULD IMMEDIATELY CONTACT THE AUTHORS */
- /* AT THE ADDRESSES LISTED BELOW. IN NO EVENT SHOULD YOU PROCEED TO */
- /* USE THIS FILE WITHOUT HAVING ACCEPTED THE TERMS OF THE */
- /* BINKLEYTERM LICENSING AGREEMENT, OR SUCH OTHER AGREEMENT AS YOU */
- /* ARE ABLE TO REACH WITH THE AUTHORS. */
- /* */
- /* */
- /* The Authors can be reached at the following addresses: */
- /* */
- /* Robert C. Hartman Vincent E. Perriello */
- /* Spark Software VEP Software */
- /* 427-3 Amherst Street 111 Carroll Street */
- /* CS2032, Suite 232 Naugatuck, CT 06770 */
- /* Nashua, NH 03061 */
- /* */
- /* FidoNet 1:132/101 FidoNet 1:141/491 */
- /* Data (603) 888-8179 Data (203) 729-7569 */
- /* */
- /* Please feel free to contact us at any time to share your comments */
- /* about our software and/or licensing policies. */
- /* */
- /* */
- /* This module is derived from code developed by Augie Hansen in his */
- /* book "Proficient C" published by Microsoft Press. Mr. Hansen was */
- /* kind enough to give us verbal permission to use his routines, and */
- /* Bob, Vince and Alan (and all our full screen users) are grateful. */
- /* If you decide to use this code in some package you are doing, give */
- /* some thought to going out and buying the book. He deserves that. */
- /* */
- /*--------------------------------------------------------------------------*/
-
-
- #include <ctype.h>
- #include "sbuf.h"
- #include "com.h"
- #include "xfer.h"
- #include "zmodem.h"
- #include "keybd.h"
- #include "sched.h"
- #include "externs.h"
- #include "prototyp.h"
-
- extern BUFFER Sbuf;
- extern CELLP Scrnbuf;
-
- int sb_putc (win, ch)
- REGIONP win;
- unsigned char ch;
- {
- int cmax, rmax;
- int noscroll = 0, puterr = 0;
-
- /* calculate the screen buffer position and limits */
- cmax = win->c1 - win->c0;
- rmax = win->r1 - win->r0;
- Sbuf.row = win->r0 + win->row;
- Sbuf.col = win->c0 + win->col;
-
- /* process the character */
- switch (ch)
- {
- case '\b':
- /* Non destructive backspace */
- if (win->col > 0)
- {
- --(win->col);
- --(Sbuf.col);
- return (SB_OK);
- }
- else
- return (SB_ERR);
-
- case '\r':
- /* clear trailing line segment */
- while (win->col < cmax)
- {
- if (sb_putc (win, ' ') == SB_ERR)
- {
- ++puterr;
- }
- }
- sb_wc (win, ' ', 1);
- break;
-
- case '\t':
- /* convert tabs to spaces */
- /* lim = win->col + 8 - (win->col & 7);
- while (win->col < lim)
- {
- if (sb_putc (win, ' ') == SB_ERR)
- {
- ++puterr;
- }
- }
- break;*/
-
- default:
- (Scrnbuf + Sbuf.row * SB_COLS + Sbuf.col)->b.ch = ch;
- if (Sbuf.col < Sbuf.lcol[Sbuf.row])
- {
- Sbuf.lcol[Sbuf.row] = Sbuf.col;
- }
- if (Sbuf.col > Sbuf.rcol[Sbuf.row])
- {
- Sbuf.rcol[Sbuf.row] = Sbuf.col;
- }
- break;
- }
-
- /* update the cursor position */
- if (win->col < cmax)
- {
- ++(win->col);
- }
- else if (win->row < rmax)
- {
- win->col = 0;
- ++(win->row);
- }
- else if (win->wflags & SB_SCROLL)
- {
- sb_scrl (win, 1);
- win->col = 0;
- win->row = rmax;
- }
- else
- {
- ++noscroll;
- }
-
- /* update screen buffer position */
- Sbuf.row = win->r0 + win->row;
- Sbuf.col = win->c0 + win->col;
- Sbuf.flags |= SB_DELTA;
-
- return ((noscroll || puterr) ? SB_ERR : SB_OK);
- }
-
- int sb_puts (win, s)
- REGIONP win;
- unsigned char *s;
- {
- while (*s)
- {
- if (sb_putc (win, *s++) == SB_ERR)
- return (SB_ERR);
- }
-
- return (SB_OK);
- }
-
-